package org.goldfish.server_demo.service;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

import redis.clients.jedis.Jedis;

import java.util.Objects;
import java.util.Properties;

/**
 * 提供基本的Redis服务类
 * 该类负责与Redis数据库进行连接，并提供获取Jedis实例的方法
 */
public class BasicRedisService {
    // Jedis实例，用于执行Redis命令
    private Jedis jedis;
    // Jedis连接池，用于管理和提供Jedis实例
    private final JedisPool jedisPool;

    /**
     * 构造方法，初始化Jedis连接池
     * 通过加载配置文件来获取Redis服务器的地址和端口信息
     * 并根据这些信息创建Jedis连接池
     */
    public BasicRedisService() {
        Properties properties = new Properties();
        try {
            // 加载redis.properties配置文件
            properties.load(this.getClass().getClassLoader().getResourceAsStream("redis.properties"));
        } catch (Exception e) {
            // 如果发生异常，则打印异常信息
            e.printStackTrace();
        }
        // 创建Jedis连接池配置对象
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        // 获取Redis服务器地址，如果未指定，则抛出异常
        String host = (properties.getProperty("host") == null) ? "localhost" : properties.getProperty("host");
        // 获取Redis服务器端口，如果未指定，则为null
        Integer port = properties.get("port") != null ? Integer.parseInt(properties.getProperty("port")) : null;
        // 根据是否提供了端口信息，创建不同配置的Jedis连接池
        jedisPool = (port != null)
                ? new JedisPool(poolConfig, host, port, 180000)
                : new JedisPool(poolConfig, host);
        System.out.println("Redis连接成功");
    }

    /**
     * 获取Jedis连接
     * 从Jedis连接池中获取一个Jedis实例
     *
     * @return Jedis实例，用于执行Redis命令
     */
    protected Jedis getConnection() {
        var ret = jedisPool.getResource();
        System.out.println("获取Redis连接成功");
        return ret;
    }
}
